home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / Visual Cafe Pro v1.0 / VISCAFE.BIN / Calendar.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-06-19  |  7.7 KB  |  433 lines

  1. package symantec.itools.awt.util;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Dimension;
  7. import java.awt.Event;
  8. import java.awt.Font;
  9. import java.awt.FontMetrics;
  10. import java.awt.Graphics;
  11. import java.awt.LayoutManager;
  12. import java.awt.Panel;
  13. import java.awt.Rectangle;
  14. import java.util.Date;
  15. import symantec.itools.awt.ComboBox;
  16. import symantec.itools.awt.NumericSpinner;
  17. import symantec.itools.lang.OS;
  18.  
  19. public class Calendar extends Panel {
  20.    private ComboBox combo;
  21.    private boolean bNeedsPlatformHelp;
  22.    // $FF: renamed from: sc symantec.itools.awt.NumericSpinner
  23.    private NumericSpinner field_0;
  24.    private Date dCurrent;
  25.    private Date dLast;
  26.    private Color selectedColor;
  27.    private String[][] cal;
  28.    private int dateSelectedx;
  29.    private int dateSelectedy;
  30.    private int lastSelectedDate;
  31.    private int maxMonthx;
  32.    private int maxMonthy;
  33.    private int firstDay;
  34.    private int topRow;
  35.    private int selectHeight;
  36.    private int centerNumber;
  37.    private int heightAdjust;
  38.    private int numberAdjust;
  39.  
  40.    public Calendar() {
  41.       this(new Date());
  42.    }
  43.  
  44.    public Calendar(Date var1) {
  45.       this.dateSelectedx = -1;
  46.       this.dateSelectedy = -1;
  47.       this.lastSelectedDate = -1;
  48.       this.maxMonthx = -1;
  49.       this.maxMonthy = -1;
  50.       this.firstDay = -1;
  51.       this.topRow = -1;
  52.       this.selectHeight = -1;
  53.       this.centerNumber = -1;
  54.       this.heightAdjust = -1;
  55.       this.numberAdjust = -1;
  56.       ((Container)this).setLayout((LayoutManager)null);
  57.       this.bNeedsPlatformHelp = ComboBox.needsPlatformHelp();
  58.       this.dCurrent = var1;
  59.       this.dLast = this.dCurrent;
  60.       this.combo = new ComboBox();
  61.       this.combo.addItem("January");
  62.       this.combo.addItem("February");
  63.       this.combo.addItem("March");
  64.       this.combo.addItem("April");
  65.       this.combo.addItem("May");
  66.       this.combo.addItem("June");
  67.       this.combo.addItem("July");
  68.       this.combo.addItem("August");
  69.       this.combo.addItem("September");
  70.       this.combo.addItem("October");
  71.       this.combo.addItem("November");
  72.       this.combo.addItem("December");
  73.       ((Container)this).add(this.combo);
  74.       this.field_0 = new NumericSpinner();
  75.       ((Container)this).add(this.field_0);
  76.       this.field_0.setMin(1900);
  77.       this.field_0.setMax(9999);
  78.       this.field_0.setCurrent(1900 + this.dCurrent.getYear());
  79.       this.field_0.setEditable(false);
  80.       this.combo.select(this.dCurrent.getMonth());
  81.       if (OS.isMacintosh()) {
  82.          this.selectedColor = Color.black;
  83.       } else {
  84.          this.selectedColor = Color.blue;
  85.       }
  86.  
  87.       if (!OS.isMacintosh()) {
  88.          if (this.bNeedsPlatformHelp) {
  89.             ((Component)this).setFont(new Font("Dialog", 0, 9));
  90.             return;
  91.          }
  92.  
  93.          ((Component)this).setFont(new Font("Dialog", 1, 10));
  94.       }
  95.  
  96.    }
  97.  
  98.    public String getDate() {
  99.       return this.dCurrent.toString();
  100.    }
  101.  
  102.    public void setDate(String var1) {
  103.       Date var2;
  104.       try {
  105.          var2 = new Date(var1);
  106.       } catch (Exception var3) {
  107.          var2 = new Date();
  108.       }
  109.  
  110.       if (!this.dCurrent.equals(var2)) {
  111.          this.dCurrent = var2;
  112.          this.combo.select(this.dCurrent.getMonth());
  113.          this.field_0.setCurrent(1900 + this.dCurrent.getYear());
  114.          this.firstDay = -1;
  115.          this.lastSelectedDate = -1;
  116.          ((Component)this).repaint();
  117.       }
  118.  
  119.    }
  120.  
  121.    public Color getSelectedColor() {
  122.       return this.selectedColor;
  123.    }
  124.  
  125.    public void setSelectedColor(Color var1) {
  126.       if (!this.selectedColor.equals(var1)) {
  127.          this.selectedColor = var1;
  128.          ((Component)this).repaint();
  129.       }
  130.  
  131.    }
  132.  
  133.    public boolean handleEvent(Event var1) {
  134.       byte var2 = -1;
  135.       switch (var1.id) {
  136.          case 501:
  137.             if (this.bNeedsPlatformHelp) {
  138.                var2 = 70;
  139.                this.centerNumber = 14;
  140.                this.heightAdjust = 6;
  141.                this.numberAdjust = 6;
  142.             } else {
  143.                var2 = 40;
  144.                this.centerNumber = 12;
  145.                this.heightAdjust = 2;
  146.                this.numberAdjust = 0;
  147.             }
  148.  
  149.             Rectangle var8 = ((Component)this).bounds();
  150.             int var10 = (var8.height - var2 - 14) / 7;
  151.             int var12 = (var8.width - 32) / 7;
  152.             if (var1.x >= 15 && var1.x < var8.width - 15 && var1.y >= var2 + var10 && var1.y < var8.height - 14) {
  153.                this.dateSelectedx = (var1.x - 16) / var12;
  154.                this.dateSelectedy = (var1.y - var2 - var10) / var10;
  155.                ((Component)this).repaint();
  156.                this.firstDay = -1;
  157.             }
  158.             break;
  159.          case 1001:
  160.             if (var1.target instanceof ComboBox) {
  161.                int var3 = this.dCurrent.getDate();
  162.                int var4 = this.combo.getSelectedIndex();
  163.                int var5 = this.dCurrent.getYear();
  164.  
  165.                for(this.dCurrent = new Date(var5, var4, var3); this.dCurrent.getMonth() != var4; this.lastSelectedDate = -1) {
  166.                   --var3;
  167.                   this.dCurrent = new Date(var5, var4, var3);
  168.                }
  169.  
  170.                this.firstDay = -1;
  171.                ((Component)this).repaint();
  172.             }
  173.  
  174.             if (var1.target == this.field_0) {
  175.                int var7 = this.dCurrent.getDate();
  176.                int var9 = this.dCurrent.getMonth();
  177.                int var11 = this.field_0.getCurrent() - 1900;
  178.  
  179.                for(this.dCurrent = new Date(var11, var9, var7); this.dCurrent.getMonth() != var9; this.lastSelectedDate = -1) {
  180.                   --var7;
  181.                   this.dCurrent = new Date(var11, var9, var7);
  182.                }
  183.  
  184.                this.firstDay = -1;
  185.                ((Component)this).repaint();
  186.             }
  187.       }
  188.  
  189.       return super.handleEvent(var1);
  190.    }
  191.  
  192.    boolean isLeapYear(int var1) {
  193.       return var1 % 4 == 0 && var1 != 2100;
  194.    }
  195.  
  196.    public void reshape(int var1, int var2, int var3, int var4) {
  197.       this.field_0.reshape(var3 - 100, 7, 100, 30);
  198.       super.reshape(var1, var2, var3, var4);
  199.    }
  200.  
  201.    public void update(Graphics var1) {
  202.       this.paint(var1);
  203.    }
  204.  
  205.    public void paint(Graphics var1) {
  206.       if (!this.field_0.getBackground().equals(((Component)this).getBackground())) {
  207.          this.field_0.setBackground(((Component)this).getBackground());
  208.       }
  209.  
  210.       this.field_0.paint(var1);
  211.       FontMetrics var2 = ((Component)this).getFontMetrics(((Component)this).getFont());
  212.       Rectangle var3 = ((Component)this).bounds();
  213.       if (OS.isMacintosh()) {
  214.          this.combo.reshape(12, 10, 100, 20);
  215.          this.topRow = 40;
  216.          this.selectHeight = var2.getHeight();
  217.          this.centerNumber = 14;
  218.          this.heightAdjust = 2;
  219.          this.numberAdjust = 0;
  220.       } else if (this.bNeedsPlatformHelp) {
  221.          this.combo.reshape(12, 20, 100, 34);
  222.          this.topRow = 70;
  223.          this.selectHeight = var2.getHeight() + 2;
  224.          this.centerNumber = 14;
  225.          this.heightAdjust = 6;
  226.          this.numberAdjust = 6;
  227.       } else {
  228.          this.combo.reshape(12, 10, 100, 25);
  229.          this.topRow = 40;
  230.          this.selectHeight = var2.getHeight();
  231.          this.centerNumber = 12;
  232.          this.heightAdjust = 2;
  233.          this.numberAdjust = 0;
  234.       }
  235.  
  236.       int var4 = (var3.width - 32) / 7;
  237.       int var5 = (var3.height - this.topRow - 16) / 7;
  238.       int var6 = var4 - var2.stringWidth("S") / 2;
  239.       int var7 = this.topRow + this.centerNumber;
  240.       if (this.dateSelectedx < 0) {
  241.          var1.setColor(Color.black);
  242.          var1.drawLine(15, this.topRow, var3.width - 17, this.topRow);
  243.          var1.setColor(Color.lightGray);
  244.          var1.drawLine(15, this.topRow + 7 * var5, var3.width - 18, this.topRow + 7 * var5);
  245.          var1.setColor(Color.white);
  246.          var1.drawLine(16, this.topRow + 1 + 7 * var5, var3.width - 17, this.topRow + 1 + 7 * var5);
  247.          var1.setColor(Color.black);
  248.          var1.drawLine(15, this.topRow, 15, this.topRow + 7 * var5);
  249.          var1.setColor(Color.lightGray);
  250.          var1.drawLine(var3.width - 17, this.topRow, var3.width - 17, this.topRow + 7 * var5);
  251.          var1.setColor(Color.white);
  252.          var1.drawLine(var3.width - 16, this.topRow, var3.width - 16, this.topRow + 7 * var5);
  253.          if (OS.isMacintosh()) {
  254.             var1.fillRect(16, this.topRow + var5, var3.width - 33, 6 * var5);
  255.             var1.setColor(Color.gray);
  256.             var1.fillRect(16, this.topRow + 1, var3.width - 32, var5 + 1);
  257.          } else {
  258.             var1.fillRect(16, this.topRow + var5, var3.width - 33, 6 * var5 + 1);
  259.             var1.setColor(Color.gray);
  260.             var1.fillRect(16, this.topRow + 1, var3.width - 32, var5 - 2);
  261.          }
  262.  
  263.          var1.setColor(Color.white);
  264.          if (OS.isMacintosh()) {
  265.             var7 += (var5 + 1) / 2 - var2.getHeight() / 2;
  266.             var1.drawString("S", var6, var7 - 1);
  267.             var6 = 2 * var4 - var2.stringWidth("M") / 2;
  268.             var1.drawString("M", var6, var7 - 1);
  269.             var6 = 3 * var4 - var2.stringWidth("T") / 2;
  270.             var1.drawString("T", var6, var7 - 1);
  271.             var6 = 4 * var4 - var2.stringWidth("W") / 2;
  272.             var1.drawString("W", var6, var7 - 1);
  273.             var6 = 5 * var4 - var2.stringWidth("T") / 2;
  274.             var1.drawString("T", var6, var7 - 1);
  275.             var6 = 6 * var4 - var2.stringWidth("F") / 2;
  276.             var1.drawString("F", var6, var7 - 1);
  277.             var6 = 7 * var4 - var2.stringWidth("S") / 2;
  278.             var1.drawString("S", var6, var7 - 1);
  279.          } else {
  280.             var1.drawString("S", var6, var7 - 1);
  281.             var6 = 2 * var4 - var2.stringWidth("M") / 2;
  282.             var1.drawString("M", var6, var7 - 1);
  283.             var6 = 3 * var4 - var2.stringWidth("T") / 2;
  284.             var1.drawString("T", var6, var7 - 1);
  285.             var6 = 4 * var4 - var2.stringWidth("W") / 2;
  286.             var1.drawString("W", var6, var7 - 1);
  287.             var6 = 5 * var4 - var2.stringWidth("T") / 2;
  288.             var1.drawString("T", var6, var7 - 1);
  289.             var6 = 6 * var4 - var2.stringWidth("F") / 2;
  290.             var1.drawString("F", var6, var7 - 1);
  291.             var6 = 7 * var4 - var2.stringWidth("S") / 2;
  292.             var1.drawString("S", var6, var7 - 1);
  293.          }
  294.       }
  295.  
  296.       new Date(this.dCurrent.getYear(), this.dCurrent.getMonth(), 1);
  297.       Date var8 = new Date(this.dCurrent.getYear(), this.dCurrent.getMonth(), 1);
  298.       if (this.firstDay < 0) {
  299.          this.firstDay = var8.getDay();
  300.       }
  301.  
  302.       int var9 = -1;
  303.       int var10 = 1;
  304.       int var11 = -1;
  305.       int var12 = this.dCurrent.getMonth() + 1;
  306.       if (this.lastSelectedDate < 1) {
  307.          var9 = this.dCurrent.getDate();
  308.       } else if (this.dateSelectedx < 0) {
  309.          var9 = this.lastSelectedDate;
  310.       }
  311.  
  312.       var1.setColor(Color.black);
  313.  
  314.       label176:
  315.       for(int var13 = 0; var13 < 6; ++var13) {
  316.          for(int var14 = 0; var14 < 7; ++var14) {
  317.             if (this.maxMonthy < this.dateSelectedy || this.maxMonthy == this.dateSelectedy && this.maxMonthx < this.dateSelectedx) {
  318.                this.dateSelectedx = -1;
  319.                this.dateSelectedy = -1;
  320.                break label176;
  321.             }
  322.  
  323.             if (var13 == 0 && var14 < this.firstDay) {
  324.                if (this.dateSelectedx == var14 && this.dateSelectedy == var13) {
  325.                   this.dateSelectedx = -1;
  326.                   this.dateSelectedy = -1;
  327.                   break label176;
  328.                }
  329.             } else {
  330.                var6 = (var14 + 1) * var4 - var2.stringWidth(Integer.toString(var10)) / 2;
  331.                var7 = this.topRow + this.heightAdjust + 4 + this.numberAdjust + ((var13 + 2) * var5 - var2.getHeight());
  332.                if (this.dateSelectedx < 0 && var9 != var10) {
  333.                   if (var10 < 10) {
  334.                      var1.drawString(Integer.toString(var10), var6, var7);
  335.                   } else {
  336.                      var1.drawString(Integer.toString(var10), var6, var7);
  337.                   }
  338.                } else if ((this.dateSelectedx != var14 || this.dateSelectedy != var13) && var9 != var10) {
  339.                   if (var10 == this.lastSelectedDate) {
  340.                      var1.setColor(Color.white);
  341.                      if (var10 < 10) {
  342.                         var1.fillRect(var6, var7 - this.selectHeight + this.heightAdjust, var2.stringWidth(Integer.toString(var10)) + 2, this.selectHeight);
  343.                      } else {
  344.                         var1.fillRect(var6, var7 - this.selectHeight + this.heightAdjust, var2.stringWidth(Integer.toString(var10)), this.selectHeight);
  345.                      }
  346.  
  347.                      var1.setColor(Color.black);
  348.                      if (var10 < 10) {
  349.                         var1.drawString(Integer.toString(var10), var6, var7);
  350.                      } else {
  351.                         var1.drawString(Integer.toString(this.lastSelectedDate), var6, var7);
  352.                      }
  353.  
  354.                      this.lastSelectedDate = -1;
  355.                   }
  356.                } else {
  357.                   if (this.dateSelectedx == var14 && this.dateSelectedy == var13) {
  358.                      this.dCurrent = new Date(this.dCurrent.getYear(), this.dCurrent.getMonth(), var10);
  359.                      this.dCurrent = new Date(this.dCurrent.getYear(), this.dCurrent.getMonth(), var10);
  360.                   }
  361.  
  362.                   var1.setColor(this.selectedColor);
  363.                   if (var10 < 10) {
  364.                      var1.fillRect(var6, var7 - this.selectHeight + this.heightAdjust, var2.stringWidth(Integer.toString(var10)) + 2, this.selectHeight);
  365.                   } else {
  366.                      var1.fillRect(var6, var7 - this.selectHeight + this.heightAdjust, var2.stringWidth(Integer.toString(var10)), this.selectHeight);
  367.                   }
  368.  
  369.                   var1.setColor(Color.white);
  370.                   if (var10 < 10) {
  371.                      var1.drawString(Integer.toString(var10), var6, var7);
  372.                   } else {
  373.                      var1.drawString(Integer.toString(var10), var6, var7);
  374.                   }
  375.  
  376.                   var11 = var10;
  377.                   var1.setColor(Color.black);
  378.                }
  379.  
  380.                if (var10 >= 31) {
  381.                   this.maxMonthx = var14;
  382.                   this.maxMonthy = var13;
  383.                   break label176;
  384.                }
  385.  
  386.                if (var10 >= 30 && (var12 == 4 || var12 == 6 || var12 == 9 || var12 == 11)) {
  387.                   this.maxMonthx = var14;
  388.                   this.maxMonthy = var13;
  389.                   break label176;
  390.                }
  391.  
  392.                if (var10 >= 29 && var12 == 2) {
  393.                   this.maxMonthx = var14;
  394.                   this.maxMonthy = var13;
  395.                   break label176;
  396.                }
  397.  
  398.                if (var10 >= 28 && var12 == 2 && !this.isLeapYear(this.dCurrent.getYear())) {
  399.                   this.maxMonthx = var14;
  400.                   this.maxMonthy = var13;
  401.                   break label176;
  402.                }
  403.  
  404.                ++var10;
  405.             }
  406.          }
  407.       }
  408.  
  409.       if (this.lastSelectedDate < 0) {
  410.          this.lastSelectedDate = var11;
  411.       }
  412.  
  413.       this.dateSelectedx = -1;
  414.       this.dateSelectedy = -1;
  415.       if (!this.dLast.equals(this.dCurrent)) {
  416.          this.dLast = this.dCurrent;
  417.          Container var30 = ((Component)this).getParent();
  418.          if (var30 != null) {
  419.             ((Component)var30).postEvent(new Event(this, 1001, this.dCurrent));
  420.          }
  421.       }
  422.  
  423.    }
  424.  
  425.    public Dimension preferredSize() {
  426.       return new Dimension(250, 200);
  427.    }
  428.  
  429.    public Dimension minimumSize() {
  430.       return new Dimension(250, 200);
  431.    }
  432. }
  433.